package probe

import (
	"net/http"
	"strings"
	"text/template"

	"main/handlers"

	"github.com/gin-gonic/gin"
)

// GetProbeTmp 处理获取项目数据的请求
func GetProbeTmp(c *gin.Context) {
	alarmConfigTmpCodes := c.Query("alarm_config_tmp_codes") // 获取 alarm_config_tmp_codes 参数
	appName := c.Query("app_name")                           // 获取 app_name 参数
	alarmGroupID := c.Query("alarm_config_group_id")         // 获取 alarm_config_group_id 参数

	// 将 alarm_config_tmp_codes 分割成切片
	codeList := strings.Split(alarmConfigTmpCodes, ",") // 假设以逗号分隔

	// 构建查询的占位符
	placeholders := make([]string, len(codeList))
	for i := range placeholders {
		placeholders[i] = "?"
	}

	query := `  
		SELECT a.*   
		FROM alarm_config_tmp a  
		LEFT JOIN alarm_config_group b ON b.alarm_config_group_id = ?  
		WHERE a.alarm_config_tmp_type = b.alarm_config_group_code  
		AND a.alarm_config_tmp_code IN (` + strings.Join(placeholders, ",") + `)  
	`

	// 创建要执行查询的参数列表
	params := make([]interface{}, 0, len(codeList)+1)
	params = append(params, alarmGroupID) // 第一个参数为 alarmGroupID
	for _, code := range codeList {
		params = append(params, code) // 添加 alarm_config_tmp_code 的各个值
	}

	results, err := handlers.ExecuteQuery(query, params...)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": "查询应用数据失败", "details": err.Error()})
		return
	}

	for i, result := range results {
		// 从结果中提取 alarm_config_tmp_formula 字段
		formula, ok := result["alarm_config_tmp_formula"].(string)
		if !ok {
			formula = "未知公式" // 处理未获取到公式的情况
		}

		// 创建模板并执行替换
		tmpl, err := template.New("formula").Parse(formula) // 解析公式作为模板
		if err != nil {
			c.JSON(http.StatusInternalServerError, gin.H{"error": "模板解析失败", "details": err.Error()})
			return
		}

		// 准备替换的数据结构
		data := map[string]interface{}{
			"Name": appName, // 替换值
		}

		// 使用 String Builder 收集输出
		var output strings.Builder
		if err := tmpl.Execute(&output, data); err != nil {
			c.JSON(http.StatusInternalServerError, gin.H{"error": "模板执行失败", "details": err.Error()})
			return
		}

		// 将生成的字符串放回 results 的对应字段
		results[i]["alarm_config_tmp_formula"] = output.String()
	}

	// 返回修改后的 results
	c.JSON(http.StatusOK, results)
}
